package II;

import java.util.HashMap;
import java.util.Map;

/*
剑指 Offer 56 - II. 数组中数字出现的次数 II
 */
public class Offer56 {
  public static void main(String[] args) {
    int[]num = new int[]{3,3,3,4};
    System.out.println(new Offer56().singleNumber(num));
  }

  public int singleNumber(int[] nums) {

//    哈希表
//    HashMap<Integer, Integer> map = new HashMap<>();
//    for (int num : nums) {
//      map.put(num,map.getOrDefault(num,0)+1);
//    }
//    for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
//      if (entry.getValue() == 1){
//        return entry.getKey();
//      }
//    }
//    return 0;

//    位运算
    int ones = 0;
    int twos = 0;
    for (int num : nums) {
      ones = ones ^ num & ~twos;
      twos = twos ^ num & ~ones;
    }
    return ones;
  }
}
